#### 找数组左边的重复数
#给定一个数组，以从左往右的顺序，返回每一个数第一次出现的下标，如果不存在则输出-1
#例子：[1,3,1,2,1]
#输出：[-1,-1,0,-1,0]
import random
from data_structure.array import *

array1 = DynamicArray()
for i in range(10):
    array1.push_back(random.randint(90,100))
    print(array1.array[i],end=' ')

max_list = [-1 for i in range(array1.elem_max()+1)]

def find_duplicate(array1):
    array_size = array1.size()
    result = [-1 for i in range(array_size)]
    for i in range(array_size):
        if max_list[array1.array[i]] != -1:
            result[i] = max_list[array1.array[i]]
        else:
            max_list[array1.array[i]] = i
    return result

print(find_duplicate(array1))


"""
给定长度为n的整数数组nums，其中n > 1，返回输出数组output，其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。
示例:
输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法，且在O(n) 时间复杂度内完成此题。
进阶： 你可以在常数空间复杂度内完成这个题目吗？（ 出于对空间复杂度分析的目的，输出数组不被视为额外空间。）
"""
nums = [1,2,3,4]
def array_product(nums):
    n = len(nums)
    result = [1 for i in nums]
    right_list = [1 for i in nums]
    for i in range(1,n):
        j = n-i-1
        result[i] = nums[i-1]*result[i-1]
        right_list[j] = nums[j+1]*right_list[j+1]
    for i in range(n):
        result[i] *= right_list[i]

    return result

k = array_product(nums)
print(k)



"""

#%%
给定一个整数数组 nums和一个目标值 target，请你在该数组中找出和为目标值的那两个整数，并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
"""



